package com.shaoyuwang.commands;

import com.shaoyuwang.util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * 书籍上架命令
 *  1. 属于管理员角色 -> 在我们当下的设计中，不考虑登录问题
 *  2. 需要用户输入：1、书名  2. 本次上架的书籍数量
 *  3. 实际要执行的 SQL：
 *     select * from books where name = ?;      行数: 0 or 1
 *     insert into books (...)
 *     update books set ... where bid = ?;
 */
public class PutAwayCommand {
    public static void main(String[] args) throws SQLException {
        // 1. 不存在登录
        // 2. 提示用户输入本次操作的基本信息
        Scanner scanner = new Scanner(System.in);
        System.out.print("请输入书名: ");
        String name = scanner.nextLine();
        System.out.print("请输入本次上架的书籍数量: ");
        int count = scanner.nextInt();

        System.out.println("DEBUG: 读取到用户输入的书名是 |" + name + "|");
        System.out.println("DEBUG: 读取到用户输入的数量是 |" + count + "|");

        // 3. 开始执行 SQL
        // 3.1 先去执行 select
        Integer bid = null;
        try (Connection c = DBUtil.connection()) {
            String sql = "select bid from books where name = ?";
            try (PreparedStatement ps = c.prepareStatement(sql)) {
                ps.setString(1, name);

                System.out.println("DEBUG: 执行 SQL: " + ps);

                try (ResultSet rs = ps.executeQuery()) {
                    if (rs.next()) {
                        // 说明这里返回 1 行了
                        bid = rs.getInt("bid");
                    }
                }
            }
        }

        System.out.println("DEBUG: 根据书名查询到的 bid = " + bid);

        // 根据 bid 是否为 null
        if (bid == null) {
            // 通过 insert 进行上架
            System.out.println("DEBUG: 使用 insert 进行上架");
            try (Connection c = DBUtil.connection()) {
                String sql = "insert into books (name, count, total) values (?, ?, ?)";
                try (PreparedStatement ps = c.prepareStatement(sql)) {
                    ps.setString(1, name);
                    ps.setInt(2, count);
                    ps.setInt(3, count);

                    System.out.println("DEBUG: 执行 SQL: " + ps);

                    ps.executeUpdate();
                }
            }
        } else {
            // 通过 update 进行上架
            System.out.println("DEBUG: 使用 update 进行上架");

            try (Connection c = DBUtil.connection()) {
                String sql = "update books set count = count + ?, total = total + ? where bid = ?";
                try (PreparedStatement ps = c.prepareStatement(sql)) {
                    ps.setInt(1, count);
                    ps.setInt(2, count);
                    ps.setInt(3, bid);

                    System.out.println("DEBUG: 执行 SQL: " + ps);

                    ps.executeUpdate();
                }
            }
        }

        System.out.println("上架成功");
    }
}
